#!/usr/bin/env python3
# -*- coding: utf-8 -*-

'''
控制USB串口继电器模块。
LCUS-1 型单路 USB 继电器
SRD-xxVDC

requirements:
pyserial
'''

import argparse
import serial
import sys
import time

# 配置串口参数 - 根据你的实际设备修改
'''
串口：
Windows串口: 'COM3'
Linux串口: '/dev/ttyUSB0'
mac串口: '/dev/cu.usbserial-1433120' 或'tty.usbserial-1433120'
'''
SERIAL_PORT = '/dev/cu.usbserial-1433120'
BAUD_RATE = 9600        # 波特率，常见的有 9600, 115200 等，请参照设备手册
TIMEOUT = 1             # 串口读写超时时间（秒）

# 定义命令对应的十六进制数据
COMMANDS = {
    "on": bytes.fromhex('A0 01 01 A2'),  # 开启命令
    "off": bytes.fromhex('A0 01 00 A1')  # 关闭命令
}

def send_hex_command(command_bytes):
    """
    通过串口发送指定的十六进制命令
    
    Args:
        command_bytes (bytes): 要发送的字节数据
    """
    try:
        # 初始化并打开串口
        with serial.Serial(port=SERIAL_PORT,
                           baudrate=BAUD_RATE,
                           timeout=TIMEOUT) as ser:
            print(f"串口 {SERIAL_PORT} 已打开")

            # 发送指令
            ser.write(command_bytes)
            print(f"指令已发送: {command_bytes.hex().upper()}")

            # 可选：等待并读取返回数据（如果设备有回复）
            # response = ser.readline()
            # if response:
            #     print(f"收到回复: {response.hex().upper()}")
            # else:
            #     print("未收到回复（超时）。")

    except serial.SerialException as e:
        print(f"[Error]: 串口错误: {e}")
        sys.exit(1)
    except Exception as e:
        print(f"[Error]: 发生未知错误: {e}")
        sys.exit(1)

def main():
    """
    主函数，解析命令行参数并发送相应命令
    """
    # 设置命令行参数解析
    parser = argparse.ArgumentParser(description='控制USB继电器设备开关')
    parser.add_argument('state', choices=['on', 'off'], help='控制状态: on 或 off')
    args = parser.parse_args()

    # 根据传入的参数获取对应的命令字节
    command_to_send = COMMANDS.get(args.state)
    if command_to_send is None:
        print("[Error]:无效的命令状态")
        sys.exit(1)

    # 发送命令
    print(f"尝试发送 {args.state} 命令...")
    send_hex_command(command_to_send)
    print(f"{args.state} 命令发送完毕。")

if __name__ == "__main__":
    main()
